﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

namespace ivv.relatorios
{
    public partial class relatorioQuantitativoEstagioObraOrigemRecurso : System.Web.UI.Page
    {
        public string relatorio;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                SqlConnection conexaoNovaSelect = new SqlConnection(ConfigurationManager.AppSettings["baseDadosNova"]);
                conexaoNovaSelect.Open();

                string selectAno = "select distinct anoIvv FROM ivv order by anoIvv desc";

                SqlCommand cmd = new SqlCommand(selectAno, conexaoNovaSelect);
                SqlDataReader dr = cmd.ExecuteReader();

                ListItem comeco = new ListItem();

                comeco.Text = "Selecione um ano";
                comeco.Value = "nulo";

                lstAno.Items.Add(comeco);

                int cont = 0;

                if (dr.HasRows)
                {
                    while (dr.Read())
                    {
                        ListItem dados = new ListItem();

                        dados.Text = dr["anoIvv"].ToString();
                        dados.Value = cont.ToString();

                        lstAno.Items.Add(dados);

                        cont++;
                    }
                }

                dr.Close();

                conexaoNovaSelect.Close();
            }
        }

        public string pegarMes(int mes)
        {
            string textoMes = "";

            switch (mes)
            {
                case 1: textoMes = "Janeiro";
                    break;
                case 2: textoMes = "Fevereiro";
                    break;
                case 3: textoMes = "Março";
                    break;
                case 4: textoMes = "Abril";
                    break;
                case 5: textoMes = "Maio";
                    break;
                case 6: textoMes = "Junho";
                    break;
                case 7: textoMes = "Julho";
                    break;
                case 8: textoMes = "Agosto";
                    break;
                case 9: textoMes = "Setembro";
                    break;
                case 10: textoMes = "Outubro";
                    break;
                case 11: textoMes = "Novembro";
                    break;
                default: textoMes = "Dezembro";
                    break;
            }
            return textoMes;
        }

        protected void lstAno_SelectedIndexChanged(object sender, EventArgs e)
        {
            lstMes.Items.Clear();

            ListItem comeco = new ListItem();

            comeco.Text = "Selecione um mês";
            comeco.Value = "nulo";

            lstMes.Items.Add(comeco);

            for (int i = 1; i < 13; i++)
            {
                ListItem dados = new ListItem();

                dados.Text = pegarMes(i);
                dados.Value = i.ToString();

                lstMes.Items.Add(dados);
            }
        }

        protected void btnGerar_Click(object sender, EventArgs e)
        {
            if (lstAno.SelectedValue != "nulo")
            {
                if (lstMes.SelectedValue != "nulo")
                {
                    if (lstTipo.SelectedValue != "0")
                    {
                        carregarDados(lstAno.SelectedItem.Text, lstMes.SelectedValue, lstTipo.SelectedValue);
                    }
                    else
                    {
                        //mensagem java script
                        string literalcc = "<script language=JavaScript>mensagem('Informe o tipo');</script>";
                        Panel1.Controls.Add(new LiteralControl(literalcc));
                        lstTipo.Focus();
                    }
                }
                else
                {
                    //mensagem java script
                    string literalcc = "<script language=JavaScript>mensagem('Informe o mês');</script>";
                    Panel1.Controls.Add(new LiteralControl(literalcc));
                    lstMes.Focus();
                }
            }
            else
            {
                //mensagem java script
                string literalcc = "<script language=JavaScript>mensagem('Informe o ano');</script>";
                Panel1.Controls.Add(new LiteralControl(literalcc));
                lstAno.Focus();
            }
        }

        void carregarDados(string ano, string mes, string tipo)
        {
            string Vrelatorio = "";
            totais t = new totais();

            relatorio = "<table id=\"relat\" width=\"100%\" border=\"2\" cellpadding=\"5\" cellspacing=\"0\" bordercolor=\"#ffffff\">";

            relatorio += "<tr>";
            relatorio += "<th colspan=\"10\">";
            relatorio += "" + lstTipo.SelectedItem.Text.ToUpper() + " POR ESTÁGIO DA OBRA x ORIGEM DOS RECURSOS<br />";
            relatorio += "MERCADO IMOBILIÁRIO DA RM RECIFE<br />";
            relatorio += "" + lstMes.SelectedItem.Text.ToUpper() + "/" + lstAno.SelectedItem.Text + " (em unidades)";
            relatorio += "</th>";
            relatorio += "</tr>";

            relatorio += "<tr>";
            relatorio += "<th rowspan=\"2\" width=\"10%\">ORIGEM</th>";
            relatorio += "<th rowspan=\"2\" width=\"10%\">NÃO DEFINIDO</th>";
            relatorio += "<th rowspan=\"2\" width=\"10%\">Fundação</th>";
            relatorio += "<th rowspan=\"2\" width=\"10%\">Estrutura</th>";
            relatorio += "<th rowspan=\"2\" width=\"10%\">Acabamento</th>";
            relatorio += "<th rowspan=\"2\" width=\"10%\">Pronto</th>";
            relatorio += "<th rowspan=\"2\" width=\"10%\">Planta</th>";
            relatorio += "<th rowspan=\"2\" width=\"10%\">Outro</th>";
            relatorio += "<th colspan=\"2\">TOTAL</th>";
            relatorio += "</tr>";

            relatorio += "<tr>";
            relatorio += "<th width=\"10%\">Unidade</th>";
            relatorio += "<th width=\"10%\">(%)</th>";
            relatorio += "</tr>";

            SqlConnection sqlc = new SqlConnection(ConfigurationManager.AppSettings["baseDados"]);
            sqlc.Open();

            string select = "select * from origemRecurso";

            SqlCommand cmd = new SqlCommand(select, sqlc);
            SqlDataReader dr = cmd.ExecuteReader();
            string estagio = "";
            double quantidade = 0;
            double[] totalColuna = new double[8];
            List<string> percent = new List<string>();
            List<double> totalLinhaList = new List<double>();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    double totalLinha = 0;

                    relatorio += "<tr>";
                    relatorio += "<th>" + dr["descricaoOrigemRecurso"].ToString() + "</th>";

                    for (int i = 0; i < 7; i++)
                    {
                        switch (i)
                        {
                            case 0:
                                estagio = "50";
                                break;
                            case 1:
                                estagio = "51";
                                break;
                            case 2:
                                estagio = "52";
                                break;
                            case 3:
                                estagio = "53";
                                break;
                            case 4:
                                estagio = "54";
                                break;
                            case 5:
                                estagio = "55";
                                break;
                            default:
                                estagio = "56";
                                break;
                        }
                        quantidade = validar(t.quantitativoDesejado(lstMes.SelectedValue, lstAno.SelectedItem.Text, Convert.ToInt16(lstTipo.SelectedValue), estagio, dr["codigoOrigemRecurso"].ToString(), 1));
                        if (quantidade == 0)
                        {
                            relatorio += "<td>-</td>";
                        }
                        else
                        {
                            relatorio += "<td>" + quantidade + "</td>";
                        }
                        totalLinha += quantidade;
                        totalColuna[i] += quantidade;
                    }

                    totalColuna[7] += totalLinha;
                    totalLinhaList.Add(totalLinha);

                    if (totalLinha == 0)
                    {
                        relatorio += "<th>-</th>";
                    }
                    else
                    {
                        relatorio += "<th>" + totalLinha + "</th>";
                    }

                    relatorio += "<td>" + dr["descricaoOrigemRecurso"].ToString() + dr["codigoOrigemRecurso"].ToString() + "</td>";
                    relatorio += "</tr>";
                    percent.Add(dr["descricaoOrigemRecurso"].ToString() + dr["codigoOrigemRecurso"].ToString());
                }
            }

            dr.Close();

            sqlc.Close();

            int cont = 0;
            foreach (var item in percent)
            {
                if (totalLinhaList[cont] == 0)
                {
                    relatorio = relatorio.Replace(item, "-");
                }
                else
                {
                    relatorio = relatorio.Replace(item, Math.Round((totalLinhaList[cont] * 100 / totalColuna[7]), 1).ToString() + "%");
                }

                cont++;
            }

            relatorio += "<tr>";
            relatorio += "<th>TOTAL</th>";
            int contador = 0;
            foreach (var item in totalColuna)
            {
                if (item == 0)
                {
                    if (contador == 7)
                    {
                        relatorio += "<th rowspan=\"2\">-</th>";
                    }
                    else
                    {
                        relatorio += "<th>-</th>";
                        Vrelatorio += "<th>-</th>";
                    }
                }
                else
                {
                    if (contador == 7)
                    {
                        relatorio += "<th rowspan=\"2\">" + item + "</th>";
                    }
                    else
                    {
                        relatorio += "<th>" + item + "</th>";
                        Vrelatorio += "<th>" + Math.Round((item * 100 / totalColuna[7]), 1).ToString() + "%</th>";
                    }
                }

                contador++;
            }
            relatorio += "<th rowspan=\"2\" width=\"10%\">100%</th>";
            relatorio += "</tr>";

            relatorio += "<tr>";
            relatorio += "<th>(%)</th>";
            relatorio += Vrelatorio;
            //relatorio += "<th></th>";
            //relatorio += "<th></th>";
            //relatorio += "<th></th>";
            //relatorio += "<th></th>";
            //relatorio += "<th></th>";
            //relatorio += "<th></th>";
            //relatorio += "<th></th>";
            //relatorio += "<th>-</th>";
            relatorio += "</tr>";

            relatorio += "</table>";

            relatorio += "</table>";
            relatorio += "<script type=\"text/javascript\"> ";
            relatorio += "$(function(){ ";
            relatorio += "$('table#relat tr:even').css('background','#E8E8E8'); ";
            relatorio += "}); ";
            relatorio += "</script> ";

            Panel1.Controls.Add(new LiteralControl(relatorio));
            Panel1.Visible = true;
        }

        double validar(string dado)
        {
            try
            {
                return Convert.ToDouble(dado);
            }
            catch
            {
                return 0;
            }
        }
    }
}
